用python+sklearn(机器学习)实现天气预报数据 模型和使用

您所在的位置:网站首页 怎么用python建模 然后生成网页代码 用python+sklearn(机器学习)实现天气预报数据 模型和使用

用python+sklearn(机器学习)实现天气预报数据 模型和使用

2024-05-10 12:15:31| 来源: 网络整理| 查看: 265

用python+sklearn机器学习实现天气预报 模型和使用 项目地址系列教程0.前言1.建立模型a.准备引入所需要的头文件选择模型选择评估方法获取数据集 b.建立模型c.获取模型评估结果d.用joblib模块保存模型e.封装 2.总控代码使用方法 3.最后效果

项目地址

github项目:PYWeatherReport

系列教程

机器学习参考篇: python+sklearn+kaggle机器学习 用python+sklearn(机器学习)实现天气预报 准备 用python+sklearn(机器学习)实现天气预报数据 数据 用python+sklearn(机器学习)实现天气预报 模型和使用

0.前言

在上一篇教程里我们已经获取了所需要的全部数据,包括训练数据集和测试数据集,使用ProcessData()调用,所以接下来写模型的建立和预测

1.建立模型

没段代码在文章后面都会整合成一段,分段展示只是便于阅读

a.准备 引入所需要的头文件 from sklearn.ensemble import RandomForestRegressor # 随机树森林模型 import joblib # 保存模型为pkl from sklearn.metrics import mean_absolute_error # MAE评估方法 from ProcessData import ProcessData # 取数据 选择模型

首先我们先要从模型里选择一项适合这次场景的模型,比如从决策树,随机树森林,RGB模型等等中选择,本处选用的随机树森林也就是RandomForest

选择评估方法

目前有许多的模型准确率评估方法,本处使用的是MAE,也就是mean_absolute_error 平均错误数值,就每个预测的数值离正确数值错误数值的平均数

获取数据集

这次可以从ProcessData()获取到全部的被预处理后的数据,如

# 取到数据 [X_train, X_valid, y_train, y_valid, X_test] = ProcessData() b.建立模型 # 用XGB模型,不过用有bug # modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4) # # model.fit(X_train_3, y_train_3) # # model.fit(X_train_2, y_train_2) # col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"] # modelX.fit(X_train, y_train, # early_stopping_rounds=5, # eval_set=[(X_valid, y_valid)], # verbose=False) # 随机树森林模型 model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型 model.fit(X_train, y_train)

其中n_estimators是可自己选的,不过在多次调试后得到1001是MAE最优

c.获取模型评估结果 # 用MAE评估 score = mean_absolute_error(y_valid, preds) d.用joblib模块保存模型

保存后的模型便于传播即可多次使用,但当前环境下的需求不大但我还是写了

# 保存模型到本地 joblib.dump(model, a) e.封装

GetModel.py

# -*- coding: utf-8 -*- # @Time: 2020/12/16 # @Author: Eritque arcus # @File: GetModel.py from sklearn.ensemble import RandomForestRegressor import joblib from sklearn.metrics import mean_absolute_error from ProcessData import ProcessData # 训练并保存模型 def GetModel(a="Model.pkl"): """ :param a: 模型文件名 :return: [socre: MAE评估结果, X_test: 预测数据集] """ # 取到数据 [X_train, X_valid, y_train, y_valid, X_test] = ProcessData() # 用XGB模型,不过用有bug # modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4) # # model.fit(X_train_3, y_train_3) # # model.fit(X_train_2, y_train_2) # col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"] # modelX.fit(X_train, y_train, # early_stopping_rounds=5, # eval_set=[(X_valid, y_valid)], # verbose=False) # 随机树森林模型 model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型 model.fit(X_train, y_train) # 预测模型,用上个星期的数据 preds = model.predict(X_valid) # 用MAE评估 score = mean_absolute_error(y_valid, preds) # 保存模型到本地 joblib.dump(model, a) # 返回MAE return [score, X_test] 2.总控 代码

这几篇文章写了零零散散好几个类,所以要写个总文件也就是启动文件串起来,然后在控制台输出 Main.py

# -*- coding: utf-8 -*- # @Time: 2020/12/16 # @Author: Eritque arcus # @File: Main.py import joblib import datetime as DT from GetModel import GetModel import matplotlib.pyplot as plt # 训练并保存模型并返回MAE r = GetModel() print("MAE:", r[0]) # 读取保存的模型 model = joblib.load('Model.pkl') # 最终预测结果 preds = model.predict(r[1]) # 反归一化或标准化,不过出bug了,不用 # for cols in range(0, len(preds)): # preds[cols] = scaler.inverse_transform(preds[cols]) # sns.lineplot(data=preds) # plt.show() # 打印结果到控制台 print("未来7天预测") print(preds) all_ave_t = [] all_high_t = [] all_low_t = [] for a in range(1, 7): today = DT.datetime.now() time = (today + DT.timedelta(days=a)).date() print(time.year, '/', time.month, '/', time.day, ': 平均气温', preds[a][0], '最高气温', preds[a][1], '最低气温', preds[a][2], "降雨量", preds[a][3], "风力", preds[a][4]) all_ave_t.append(preds[a][0]) all_high_t.append(preds[a][1]) all_low_t.append(preds[a][2]) temp = {"ave_t": all_ave_t, "high_t": all_high_t, "low_t": all_low_t} # 绘画折线图 plt.plot(range(1, 7), temp["ave_t"], color="green", label="ave_t") plt.plot(range(1, 7), temp["high_t"], color="red", label="high_t") plt.plot(range(1, 7), temp["low_t"], color="blue", label="low_t") plt.legend() # 显示图例 plt.ylabel("Temperature(°C)") plt.xlabel("day") # 显示 plt.show() 使用方法

直接用python运行pre_weather/Main.py,就会在控制台输出预测的数据

python pre_weather/Main.py

在你的python代码里用joblib导入生成的模型,然后输入你的数据进行预测

(PS: 因为模型的训练用的数据日期和你预测数据的日期有关,所以不建议直接用使用非当天训练的模型进行预测,误差可能偏大)

如以下代码(在Main.py的11行):

import joblib # 读取保存的模型 model = joblib.load('Model.pkl') # 最终预测结果 preds = model.predict(r[1]) 其中,r[1]是预测数据

参考Main.py,自己写一个符合你需求的启动文件

3.最后效果

效果

本系列教程到这就结束了,代码具体还要以github项目:PYWeatherReport为主,可能会在这个github项目上不定期优化更新 有问题可以在评论问问

-END-


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭